package org.glow.changgou.goods.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.glow.changgou.goods.dao.SkuMapper;
import org.glow.changgou.goods.pojo.Para;
import org.glow.changgou.goods.pojo.Sku;
import org.glow.changgou.goods.service.SkuService;
import org.glow.changgou.order.pojo.OrderItem;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;
import java.util.List;

/****
 * @Author:admin
 * @Description:Sku业务层接口实现类
 * @Date 2022/09/24 14:21:35
 *****/
@Service
public class SkuServiceImpl  extends ServiceImpl<SkuMapper, Sku> implements SkuService {

    @Autowired
    private SkuService skuService;
    @Resource
    private SkuMapper skuMapper;
    @Autowired
    private RedisTemplate redisTemplate;
    /**
     * Sku条件+分页查询
     * @param sku 查询条件
     * @param page 页码
     * @param size 页大小
     * @return 分页结果
     */
    @Override
    public Page<Sku> findPage(Sku sku, int page, int size){
        //分页
        Page<Sku> pageInfo = new Page<>(page,size);
        LambdaQueryWrapper<Sku> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper = getCondition(queryWrapper,sku);
        //执行搜索
        return skuService.page(pageInfo,queryWrapper);
    }

    /**
     * Sku分页查询
     * @param page
     * @param size
     * @return
     */
    @Override
    public Page<Sku> findPage(int page, int size){
        //静态分页
        Page<Sku> pageInfo = new Page<>(page,size);
        //分页查询
        return skuService.page(pageInfo);
    }

    /**
     * Sku条件查询
     * @param sku
     * @return
     */
    @Override
    public List<Sku> findList(Sku sku){
        //构建查询条件
        LambdaQueryWrapper<Sku> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper = getCondition(queryWrapper,sku);
        //根据构建的条件查询数据
        return skuService.list(queryWrapper);
    }


    /**
     * Sku构建查询对象
     * @param sku
     * @return
     */
    public LambdaQueryWrapper<Sku> getCondition(LambdaQueryWrapper<Sku> queryWrapper,Sku sku){

        if(sku!=null){
            // 商品id
            if(!StringUtils.isEmpty(sku.getId())){
//                    criteria.andEqualTo("id",sku.getId());
                    queryWrapper.eq(Sku::getId,sku.getId());
            }
            // 商品条码
            if(!StringUtils.isEmpty(sku.getSn())){
//                    criteria.andEqualTo("sn",sku.getSn());
                    queryWrapper.eq(Sku::getSn,sku.getSn());
            }
            // SKU名称
            if(!StringUtils.isEmpty(sku.getName())){
//                    criteria.andLike("name","%"+sku.getName()+"%");
                    queryWrapper.like(Sku::getName,sku.getName());
            }
            // 价格（分）
            if(!StringUtils.isEmpty(sku.getPrice())){
//                    criteria.andEqualTo("price",sku.getPrice());
                    queryWrapper.eq(Sku::getPrice,sku.getPrice());
            }
            // 库存数量
            if(!StringUtils.isEmpty(sku.getNum())){
//                    criteria.andEqualTo("num",sku.getNum());
                    queryWrapper.eq(Sku::getNum,sku.getNum());
            }
            // 库存预警数量
            if(!StringUtils.isEmpty(sku.getAlertNum())){
//                    criteria.andEqualTo("alertNum",sku.getAlertNum());
                    queryWrapper.eq(Sku::getAlertNum,sku.getAlertNum());
            }

            // 商品图片
            if(!StringUtils.isEmpty(sku.getImage())){
//                    criteria.andEqualTo("image",sku.getImage());
                    queryWrapper.eq(Sku::getImage,sku.getImage());
            }
            // 商品图片列表
            if(!StringUtils.isEmpty(sku.getImages())){
//                    criteria.andEqualTo("images",sku.getImages());
                    queryWrapper.eq(Sku::getImages,sku.getImages());
            }
            // 重量（克）
            if(!StringUtils.isEmpty(sku.getWeight())){
//                    criteria.andEqualTo("weight",sku.getWeight());
                queryWrapper.eq(Sku::getWeight,sku.getWeight());
            }
            // 创建时间
            if(!StringUtils.isEmpty(sku.getCreateTime())){
//                    criteria.andEqualTo("createTime",sku.getCreateTime());
                    queryWrapper.eq(Sku::getCreateTime,sku.getCreateTime());
            }
            // 更新时间
            if(!StringUtils.isEmpty(sku.getUpdateTime())){
//                    criteria.andEqualTo("updateTime",sku.getUpdateTime());
                    queryWrapper.eq(Sku::getUpdateTime,sku.getUpdateTime());
            }
            // SPUID
            if(!StringUtils.isEmpty(sku.getSpuId())){
//                    criteria.andEqualTo("spuId",sku.getSpuId());
                    queryWrapper.eq(Sku::getSpuId,sku.getSpuId());
            }
            // 类目ID
            if(!StringUtils.isEmpty(sku.getCategoryId())){
//                    criteria.andEqualTo("categoryId",sku.getCategoryId());
                    queryWrapper.eq(Sku::getCategoryId,sku.getCategoryId());
            }
            // 类目名称
            if(!StringUtils.isEmpty(sku.getCategoryName())){
//                    criteria.andEqualTo("categoryName",sku.getCategoryName());
                queryWrapper.eq(Sku::getCategoryName,sku.getCategoryName());
            }
            // 品牌名称
            if(!StringUtils.isEmpty(sku.getBrandName())){
//                    criteria.andEqualTo("brandName",sku.getBrandName());
                queryWrapper.eq(Sku::getBrandName,sku.getBrandName());
            }
            // 规格
            if(!StringUtils.isEmpty(sku.getSpec())){
//                    criteria.andEqualTo("spec",sku.getSpec());
                queryWrapper.eq(Sku::getSpec,sku.getSpec());
            }
            // 销量
            if(!StringUtils.isEmpty(sku.getSaleNum())){
//                    criteria.andEqualTo("saleNum",sku.getSaleNum());
                queryWrapper.eq(Sku::getSaleNum,sku.getSaleNum());
            }
            // 评论数
            if(!StringUtils.isEmpty(sku.getCommentNum())){
                queryWrapper.eq(Sku::getCommentNum,sku.getCommentNum());
            }
            // 商品状态 1-正常，2-下架，3-删除
            if(!StringUtils.isEmpty(sku.getStatus())){

                queryWrapper.eq(Sku::getStatus,sku.getStatus());
            }
        }
        return queryWrapper;
    }

    /**
     * 删除
     * @param id
     */
    @Override
    public void delete(Long id){
        skuService.removeById(id);
    }

    /**
     * 修改Sku
     * @param sku
     */
    @Override
    public void update(Sku sku){
        skuService.update(sku);
    }

    /**
     * 增加Sku
     * @param sku
     */
    @Override
    public void add(Sku sku){
        skuService.save(sku);
    }

    /**
     * 根据ID查询Sku
     * @param id
     * @return
     */
    @Override
    public Sku findById(Long id){
        return  skuService.getById(id);
    }

    /**
     * 查询Sku全部数据
     * @return
     */
    @Override
    public List<Sku> findAll() {
        return skuService.list();
    }

    @Override
    public List<Sku> findByStatus(String status) {
        LambdaQueryWrapper<Sku> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(Sku::getStatus,status);
        return skuService.list(queryWrapper);
    }
    @Transactional
    @Override
    public void decrCount(String username) {
            List<OrderItem> orderItems = redisTemplate.boundHashOps("Cart_"+username).values();
            for(OrderItem orderItem: orderItems)
            {
                int count = skuMapper.decrCount(orderItem);
                if(count<=0){
                    throw new RuntimeException("库存不足，递减失败！");
                }
            }
    }
}
